package com.search.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

public class FileUtil {

	/**
	 * springboot通过该方法将在指定目录下添加指定文件
	 * 
	 * @param file     文件的二进制
	 * @param filePath 文件路径
	 * @param fileName 文件名
	 * @throws IOException
	 */
	public static Map<String, Object> fileUpload(String filePath, MultipartFile file) throws IOException {
		Map<String, Object> map = new HashMap<String, Object>();

		// 目标目录创建
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
		String path1 = format.format(new Date().getTime());
		filePath = filePath + path1.substring(0, 6) + "/";// 年月
		filePath = filePath + path1 + "/";// 年月日
		File path = new File(filePath);
		if (!path.exists()) {
			path.mkdirs();
		}

		String fileName = file.getOriginalFilename();
		// 注意：不同的浏览器提交的文件名是不一样的，有些浏览器提交上来的文件名是带有路径的，如： c:\a\b\1.txt，而有些只是单纯的文件名，如：1.txt
		// 处理获取到的上传文件的文件名的路径部分，只保留文件名部分
		fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
		String showName = String.valueOf(new Date().getTime()) + fileName.substring(fileName.lastIndexOf("."));// 获取上传文件的后缀

		// 二进制流写入
		FileOutputStream out = new FileOutputStream(filePath + showName);
		out.write(file.getBytes());
		out.flush();
		out.close();

//		System.out.println("文件名:TRUENAME=" + fileName);
//		System.out.println("显示文件名：PUBNAME=" + showName);
//		System.out.println("文件url:LOCATIONURL=" + filePath.substring(filePath.indexOf("/upload")) + showName);
//		System.out.println("上传时间:UPLOADTIME=" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
		map.put("fileTrueName", fileName);
		map.put("fileShowName", showName);
		map.put("fileUrl", filePath.substring(filePath.indexOf("/upload")) + showName);
		map.put("fileUploadTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()));

		return map;
	}

	/**
	 * sertlet
	 * 
	 * @param filePath
	 * @param request
	 * @return
	 * @throws IOException
	 */
//	public static Map<String, Object> fileUpload(String filePath, HttpServletRequest request) throws IOException {
//		Map<String, Object> map = new HashMap<String, Object>();
//
//		// 目标目录创建
//		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
//		String path1 = format.format(new Date().getTime());
//		filePath = filePath + path1.substring(0, 6) + "/";// 年月
//		filePath = filePath + path1 + "/";// 年月日
//		File path = new File(filePath);
//		if (!path.exists()) {
//			path.mkdirs();
//		}
//
//		request.setCharacterEncoding("utf-8");
//
//		// 1、创建一个DiskFileItemFactory工厂
//		DiskFileItemFactory factory = new DiskFileItemFactory();
//		// 2、创建一个文件上传解析器
//		ServletFileUpload upload = new ServletFileUpload(factory);
//		// 解决上传文件名的中文乱码
//		upload.setHeaderEncoding("UTF-8");
//		factory.setSizeThreshold(1024 * 500);// 设置内存的临界值为500K
//		File temp = new File(filePath + "temp/");// 当超过500K的时候，存到一个临时文件夹中
//		// 如果目录不存在
//		if (!temp.exists()) {
//			// 创建目录
//			temp.mkdirs();
//		}
//		factory.setRepository(temp);
//		upload.setSizeMax(1024 * 1024 * 500);// 设置上传的文件总的大小不能超过5M
//		try {
//			// 1. 得到 FileItem 的集合 items
//
//			List<FileItem> items = upload.parseRequest(request);
//
//			// 2. 遍历 items:
//			for (FileItem item : items) {
//				// 若是一个一般的表单域, 打印信息
//				if (item.isFormField()) {
////					String name = item.getFieldName();
////					String value = item.getString("utf-8");
//				}
//				// 若是文件域则把文件保存到 e:\\files 目录下.
//				else {
//					String fileName = item.getName();
//					// 注意：不同的浏览器提交的文件名是不一样的，有些浏览器提交上来的文件名是带有路径的，如： c:\a\b\1.txt，而有些只是单纯的文件名，如：1.txt
//					// 处理获取到的上传文件的文件名的路径部分，只保留文件名部分
//					fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
//
//					String showName = String.valueOf(new Date().getTime())
//							+ fileName.substring(fileName.lastIndexOf("."));// 获取上传文件的后缀
//
//					InputStream in = item.getInputStream();
//					byte[] buffer = new byte[1024];
//					int len = 0;
//					OutputStream out = new FileOutputStream(filePath + showName);
//					while ((len = in.read(buffer)) != -1) {
//						out.write(buffer, 0, len);
//					}
//
//					out.close();
//					in.close();
//					System.out.println("文件名:TRUENAME=" + fileName);
//					System.out.println("显示文件名：PUBNAME=" + showName);
//					System.out
//							.println("文件url:LOCATIONURL=" + filePath.substring(filePath.indexOf("/upload")) + showName);
//					System.out.println(
//							"上传时间:UPLOADTIME=" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//					map.put("fileTrueName", fileName);
//					map.put("fileShowName", showName);
//					map.put("fileUrl", filePath.substring(filePath.indexOf("/upload")) + showName);
//					map.put("fileUploadTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()));
//				}
//			}
//
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return map;
//	}
}
